home *** CD-ROM | disk | FTP | other *** search
/ Technotools / Technotools (Chestnut CD-ROM)(1993).ISO / lang_c / cswitc / lmtc.asm < prev    next >
Assembly Source File  |  1990-08-06  |  6KB  |  310 lines

  1. ;
  2. ; assembly language functions for C programs to use the
  3. ; multi-tasking features of Cswitch
  4. ;
  5.  
  6. p1 = 6
  7. p2 = 8
  8. p3 = 10
  9. p4 = 12
  10.  
  11. ;
  12. ; cswitch INT62 functions
  13. ;
  14. ; 1  = relinqush rest of our time slice
  15. ; 2  = wait for semaphore
  16. ; 3  = check semaphore
  17. ; 4  = trigger semaphore
  18. ; 5  = sleep
  19. ; 6  = suspend
  20. ; 7  = spawn
  21. ; 8  = wake up a task
  22. ; 10 = test message queue
  23. ; 11 = send message
  24. ; 12 = read message
  25. ; 13 = don't allow task to be swapped out
  26. ; 14 = allow swapping again
  27. ; 15 = load and run a program from disk
  28. ; 16 = terminate a spawned program
  29. ; 17 = get tcb information
  30. ; 18 = get tcb address
  31. ; 19 = check status of previous load_task call
  32. ;
  33.  
  34.  
  35. mt_cint_text    segment word public 'CODE'
  36.         assume  cs:mt_cint_text
  37.  
  38.     public _relinq
  39.     public _spawn
  40.     public _loadtask
  41.     public _sleep
  42.     public _send_md_msg
  43.     public _testmsg
  44.     public _recvmsg
  45.     public _sem_attach
  46.     public _sem_release
  47.     public _sem_test
  48.     public _setpri
  49.     public _suspend
  50.     public _wakeup
  51.     public _hog
  52.     public _nohog
  53.     public _spawn_exit
  54.     public _get_tcb_info
  55.     public _get_tcb_address
  56.     public _get_load_status
  57.  
  58.     
  59. _relinq  proc    far
  60.     mov ah,1
  61.     int 62h
  62.     ret
  63. _relinq endp
  64.  
  65.  
  66. _get_load_status  proc    far
  67.     mov ah,19
  68.     int 62h
  69.     ret
  70. _get_load_status endp
  71.  
  72. _spawn_exit proc far
  73.     mov ah,16
  74.     int 62h
  75.     ret
  76. _spawn_exit endp
  77.  
  78. _hog  proc    far
  79.     mov ah,13
  80.     int 62h
  81.     ret
  82. _hog endp
  83.  
  84. _nohog  proc    far
  85.     mov ah,14
  86.     int 62h
  87.     ret
  88. _nohog endp
  89.  
  90. _spawn  proc    far
  91.     push    bp
  92.     mov     bp,sp
  93.     push    es
  94.     push    bx
  95.     push    cx
  96.     mov     bx,[bp+6]   ;offset
  97.     mov     ax,[bp+8]   ;segment
  98.     mov     es,ax
  99.     mov     cx,[bp+10]
  100.     mov     ah,7
  101.     int     62h
  102.     pop     cx
  103.     pop     bx
  104.     pop     es
  105.     pop     bp
  106.     ret
  107. _spawn  endp
  108.  
  109. _get_tcb_info  proc    far
  110.     push    bp
  111.     mov     bp,sp
  112.     push    es
  113.     push    bx
  114.     mov     bx,[bp+6]   ;offset
  115.     mov     ax,[bp+8]   ;segment
  116.     mov     es,ax
  117.     mov     ah,17
  118.     int     62h
  119.     pop     bx
  120.     pop     es
  121.     pop     bp
  122.     ret
  123. _get_tcb_info  endp
  124.  
  125. _get_tcb_address  proc    far
  126.     push    bp
  127.     mov     bp,sp
  128.     push    es
  129.     push    bx
  130.     mov     bx,[bp+6]   ;offset
  131.     mov     ax,[bp+8]   ;segment
  132.     mov     es,ax
  133.     mov     ah,18
  134.     int     62h
  135.     pop     bx
  136.     pop     es
  137.     pop     bp
  138.     ret
  139. _get_tcb_address  endp
  140.  
  141. _loadtask  proc    far
  142.     push    bp
  143.     mov     bp,sp
  144.     push    es
  145.     push    bx
  146.     push    cx
  147.     push    dx
  148.     mov     bx,[bp+6]   ;offset of command line
  149.     mov     ax,[bp+8]   ;segment
  150.     mov     es,ax
  151.     mov     cx,[bp+10]  ;priority
  152.     mov     dx,[bp+12]  ;background flag - if non-0, allows loading to ems
  153.     mov     ah,15
  154.     int     62h
  155.     pop     dx
  156.     pop     cx
  157.     pop     bx
  158.     pop     es
  159.     pop     bp
  160.     ret
  161. _loadtask  endp
  162.  
  163. ; params = how many ticks
  164. _sleep  proc    far
  165.     push    bp
  166.     mov     bp,sp
  167.     push    bx
  168.     mov     bx,[bp+6]
  169.     mov     ah,5
  170.     int     62h
  171.     pop     bx
  172.     pop     bp
  173.     ret
  174. _sleep   endp
  175.  
  176.  
  177. _suspend  proc    far
  178.     mov     ah,6
  179.     int     62h
  180.     ret
  181. _suspend   endp
  182.  
  183. ;params = task to wake up
  184. _wakeup  proc    far
  185.     push    bp
  186.     mov     bp,sp
  187.     push    bx
  188.     mov     bx,[bp+6]
  189.     mov     ah,8
  190.     int     62h
  191.     pop     bx
  192.     pop     bp
  193.     ret
  194. _wakeup   endp
  195.  
  196.  
  197. ; params = new priority
  198. _setpri  proc    far
  199.     push    bp
  200.     mov     bp,sp
  201.     push    bx
  202.     mov     bx,[bp+6]
  203.     mov     ah,9
  204.     int     62h
  205.     pop     bx
  206.     pop     bp
  207.     ret
  208. _setpri   endp
  209.  
  210. _sem_attach    proc far
  211.     push    bp
  212.     mov     bp,sp
  213.     push    dx
  214.     mov     dx,[bp+6]
  215.     mov     ah,2
  216.     int     62h
  217.     pop     dx
  218.     pop     bp
  219.     ret
  220. _sem_attach    endp
  221.  
  222. _sem_test    proc far
  223.     push    bp
  224.     mov     bp,sp
  225.     push    dx
  226.     mov     dx,[bp+6]
  227.     mov     ah,3
  228.     int     62h
  229.     pop     dx
  230.     pop     bp
  231.     ret
  232. _sem_test    endp
  233.  
  234. _sem_release    proc far
  235.     push    bp
  236.     mov     bp,sp
  237.     push    dx
  238.     mov     dx,[bp+6]
  239.     mov     ah,4
  240.     int     62h
  241.     pop     dx
  242.     pop     bp
  243.     ret
  244. _sem_release    endp
  245.  
  246. _testmsg  proc far
  247.     push    bp
  248.     mov     bp,sp
  249.     push    dx
  250.     mov     dx,[bp+6]   ;queue number to check
  251.     mov     ah,10
  252.     int     62h
  253.     pop     dx
  254.     pop     bp
  255.     ret
  256. _testmsg      endp
  257.  
  258. _send_md_msg    proc far
  259.     push    bp
  260.     mov     bp,sp
  261.     push    dx
  262.     push    ds
  263.     push    si
  264.     push    cx
  265.     mov     si,[bp+8]  ;offset for data buffer
  266.     mov     ax,[bp+10]   ;segment for data buffer
  267.     mov     ds,ax
  268.     mov     cx,[bp+12]  ;length
  269.     mov     dx,[bp+6]   ;queue number to read from
  270.     mov     ah,11
  271.     int     62h
  272.     pop     cx
  273.     pop     si
  274.     pop     ds
  275.     pop     dx
  276.     pop     bp
  277.     ret
  278. _send_md_msg    endp
  279.  
  280. _recvmsg    proc far
  281.     push    bp
  282.     mov     bp,sp
  283.     push    dx
  284.     push    ds
  285.     push    si
  286.     push    cx
  287.     mov     si,[bp+8]  ;offset for data buffer
  288.     mov     ax,[bp+10]   ;segment for data buffer
  289.     mov     ds,ax
  290.     mov     cx,[bp+12]  ;length
  291.     mov     dx,[bp+6]   ;queue number to read from
  292. read2:
  293.     mov     ah,12
  294.     int     62h
  295.     cmp     ax,0fffeh   ;if -2 (0fffeh) is returned, then we have been
  296.                         ;triggered by something arriving on queue, and we
  297.                         ;must make the 'read' call again to retrieve it
  298.     jz      read2
  299.     pop     cx
  300.     pop     si
  301.     pop     ds
  302.     pop     dx
  303.     pop     bp
  304.     ret
  305. _recvmsg    endp
  306.  
  307. mt_cint_text    ends
  308.         end
  309.     
  310.